package com.tasty.controller.admin;

import com.tasty.dto.SetmealDTO;
import com.tasty.dto.SetmealPageQueryDTO;
import com.tasty.result.PageResult;
import com.tasty.result.Result;
import com.tasty.service.SetmealService;
import com.tasty.vo.SetmealVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.*;

import java.util.List;


@RestController
@RequestMapping("/admin/setmeal")
@Api(tags = "套餐相关接口")
@Slf4j
public class SetmealController {

        @Autowired
        private SetmealService setmealService;

        /**
         * 新增套餐
         * @param setmealDTO
         * @return
         */
        @PostMapping
        @ApiOperation("新增套餐")
        @CacheEvict(cacheNames = "setmealCache",key = "#setmealDTO.categoryId")
        public Result save(@RequestBody SetmealDTO setmealDTO) {
            setmealService.saveWithDish(setmealDTO);
            return Result.success();
        }

        /**
         * 分页查询
         * @param setmealPageQueryDTO
         * @return
         */
        @GetMapping("/page")
        @ApiOperation("分页查询")
        public Result<PageResult> page(SetmealPageQueryDTO setmealPageQueryDTO) {
            PageResult pageResult = setmealService.pageQuery(setmealPageQueryDTO);
            return Result.success(pageResult);
        }

        /**
         * 批量删除套餐
         * @param ids
         * @return
         */
        @DeleteMapping
        @ApiOperation("批量删除套餐")
        @CacheEvict(cacheNames = "setmealCache",allEntries = true)
        public Result delete(@RequestParam List<Long> ids){
            setmealService.deleteBatch(ids);
            return Result.success();
        }

        /**
         * 根据id查询套餐，用于修改页面回显数据
         *
         * @param id
         * @return
         */
        @GetMapping("/{id}")
        @ApiOperation("根据id查询套餐")
        public Result<SetmealVO> getById(@PathVariable Long id) {
            SetmealVO setmealVO = setmealService.getByIdWithDish(id);
            return Result.success(setmealVO);
        }

        /**
         * 修改套餐
         *
         * @param setmealDTO
         * @return
         */
        @PutMapping
        @ApiOperation("修改套餐")
        @CacheEvict(cacheNames = "setmealCache",allEntries = true)
        public Result update(@RequestBody SetmealDTO setmealDTO) {
            setmealService.update(setmealDTO);
            return Result.success();
        }

        /**
         * 套餐起售停售
         * @param status
         * @param id
         * @return
         */
        @PostMapping("/status/{status}")
        @ApiOperation("套餐起售停售")
        @CacheEvict(cacheNames = "setmealCache",allEntries = true)
        public Result startOrStop(@PathVariable Integer status, Long id) {
            setmealService.startOrStop(status, id);
            return Result.success();
        }

}

